--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Node / ReticulumProjects / MeshChatX.git / files / meshchatx / src / frontend / components / page-nodes / PageNodesPage.vue
Displaying Raw • Download
meshchatx/src/frontend/components/page-nodes/PageNodesPage.vue v4.6.2-rc.1 (6ba4fecd) Text, 29.11 KB
T8b949e<!-- SPDX-License-Identifier: 0BSD -->
Tb4b4b4<Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col flex-1 overflow-hidden min-w-0 bg-slate-50 dark:bg-zinc-950"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"flex-1 overflow-y-auto w-full px-4 md:px-5 lg:px-8 py-6 pb-[max(1.5rem,env(safe-area-inset-bottom))]"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-4 w-full max-w-5xl mx-auto"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"glass-card space-y-5"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex flex-col lg:flex-row lg:items-center justify-between gap-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"space-y-2"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs uppercase tracking-wide text-gray-500 dark:text-gray-400"Tb4b4b4>
Reticulum Content Serving
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-2xl font-semibold text-gray-900 dark:text-white"Tb4b4b4>Mesh ServerTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-600 dark:text-gray-300"Tb4b4b4>
Serve Micron pages and files directly over the Reticulum mesh. Each server gets its own
identity and destination address.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3typeTff7b72=Ta5d6ff"button"
Te6edf3classTff7b72=Ta5d6ff"primary-chip px-4 py-2 text-sm shrink-0"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3showCreateDialog Tff7b72= Tff7b72trueTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"plus" Te6edf3classTff7b72=Ta5d6ff"w-4 h-4" Tb4b4b4/Tb4b4b4>
Create Node
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3loadingTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"glass-card text-center py-12"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-gray-500 dark:text-gray-400"Tb4b4b4>Loading nodes...Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-else-ifTff7b72=Ta5d6ff"Te6edf3nodesTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"glass-card text-center py-12"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"server-network" Te6edf3classTff7b72=Ta5d6ff"w-12 h-12 mx-auto mb-4 text-gray-400" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-gray-600 dark:text-gray-400 mb-2"Tb4b4b4>No mesh servers yetTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-500 dark:text-gray-500"Tb4b4b4>
Create a server to start serving Micron pages over the mesh.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3v-else Te6edf3classTff7b72=Ta5d6ff"space-y-3"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3node Tff7b72in Te6edf3nodesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3nodeTb4b4b4.Te6edf3node_idTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"glass-card space-y-4 cursor-pointer hover:border-blue-400 dark:hover:border-blue-500 transition"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3selectNodeTb4b4b4(Te6edf3nodeTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-3"Tb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3classTff7b72=Ta5d6ff"w-3 h-3 rounded-full"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Te6edf3nodeTb4b4b4.Te6edf3running Tff7b72? Ta5d6ff'bg-green-500' Tff7b72: Ta5d6ff'bg-gray-400'Ta5d6ff"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-semibold text-gray-900 dark:text-white"Tb4b4b4>Tff7b72{{ Te6edf3nodeTb4b4b4.Te6edf3name Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3nodeTb4b4b4.Te6edf3destination_hashTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-xs font-mono text-gray-500 dark:text-gray-400"
Tb4b4b4>
Tff7b72{{ Te6edf3nodeTb4b4b4.Te6edf3destination_hash Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-gray-400"Tb4b4b4>
Tff7b72{{ Te6edf3nodeTb4b4b4.Te6edf3pagesTb4b4b4.Te6edf3length Tff7b72}} pages, Tff7b72{{ Te6edf3nodeTb4b4b4.Te6edf3filesTb4b4b4.Te6edf3length Tff7b72}} files
Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Tff7b72!Te6edf3nodeTb4b4b4.Te6edf3runningTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"primary-chip py-1! px-3! text-xs!"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"Te6edf3startNodeTb4b4b4(Te6edf3nodeTb4b4b4.Te6edf3node_idTb4b4b4)Ta5d6ff"
Tb4b4b4>
Start
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3v-else
Te6edf3classTff7b72=Ta5d6ff"secondary-chip py-1! px-3! text-xs! text-red-500! hover:bg-red-50! dark:hover:bg-red-900/20!"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"Te6edf3stopNodeTb4b4b4(Te6edf3nodeTb4b4b4.Te6edf3node_idTb4b4b4)Ta5d6ff"
Tb4b4b4>
Stop
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3nodeTb4b4b4.Te6edf3runningTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"secondary-chip py-1! px-3! text-xs!"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"Te6edf3announceNodeTb4b4b4(Te6edf3nodeTb4b4b4.Te6edf3node_idTb4b4b4)Ta5d6ff"
Tb4b4b4>
Announce
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3nodeTb4b4b4.Te6edf3running Tff7b72&& Te6edf3nodeTb4b4b4.Te6edf3destination_hashTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"secondary-chip py-1! px-3! text-xs!"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"Te6edf3viewNodeTb4b4b4(Te6edf3nodeTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"eye" Te6edf3classTff7b72=Ta5d6ff"w-3.5 h-3.5" Tb4b4b4/Tb4b4b4>
View
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"secondary-chip py-1! px-3! text-xs! text-red-500! hover:bg-red-50! dark:hover:bg-red-900/20!"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3stopTff7b72=Ta5d6ff"Te6edf3deleteNodeTb4b4b4(Te6edf3nodeTb4b4b4.Te6edf3node_idTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"delete" Te6edf3classTff7b72=Ta5d6ff"w-3.5 h-3.5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3nodeTb4b4b4.Te6edf3stats Tff7b72|| Te6edf3nodeTb4b4b4.Te6edf3runningTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex flex-wrap gap-x-4 gap-y-1 text-xs text-gray-500 dark:text-gray-400"
Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3nodeTb4b4b4.Te6edf3runningTa5d6ff"Tb4b4b4>Tff7b72{{ Te6edf3formatMeshUptimeTb4b4b4(Te6edf3nodeTb4b4b4.Te6edf3uptime_secondsTb4b4b4) Tff7b72}} uptimeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72spanTb4b4b4>Tff7b72{{ Te6edf3nodeTb4b4b4.Te6edf3unique_connections Tff7b72?? T79c0ff0 Tff7b72}} unique connectionsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3nodeTb4b4b4.Te6edf3statsTa5d6ff"Tb4b4b4>Tff7b72{{ Te6edf3nodeTb4b4b4.Te6edf3statsTb4b4b4.Te6edf3pages_served Tff7b72}} pages servedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3nodeTb4b4b4.Te6edf3statsTa5d6ff"Tb4b4b4>Tff7b72{{ Te6edf3nodeTb4b4b4.Te6edf3statsTb4b4b4.Te6edf3files_served Tff7b72}} files servedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3nodeTb4b4b4.Te6edf3statsTa5d6ff"Tb4b4b4>Tff7b72{{ Te6edf3nodeTb4b4b4.Te6edf3statsTb4b4b4.Te6edf3links_established Tff7b72}} linksTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Selected Node Detail -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3selectedNodeTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"glass-card space-y-5"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-lg font-semibold text-gray-900 dark:text-white"Tb4b4b4>
Tff7b72{{ Te6edf3selectedNodeTb4b4b4.Te6edf3name Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3classTff7b72=Ta5d6ff"secondary-chip py-1! px-3! text-xs!" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3showRenameDialog Tff7b72= Tff7b72trueTa5d6ff"Tb4b4b4>
Rename
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3classTff7b72=Ta5d6ff"secondary-chip py-1! px-3! text-xs!" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3selectedNode Tff7b72= Tff7b72nullTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"close" Te6edf3classTff7b72=Ta5d6ff"w-3.5 h-3.5" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3selectedNodeTb4b4b4.Te6edf3destination_hashTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"p-3 rounded-lg bg-blue-50 dark:bg-blue-900/20 text-blue-700 dark:text-blue-300"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between mb-1"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-xs font-bold uppercase tracking-wider"Tb4b4b4>Destination HashTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3selectedNodeTb4b4b4.Te6edf3runningTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"primary-chip py-0.5! px-2! text-xs!"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3viewNodeTb4b4b4(Te6edf3selectedNodeTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"eye" Te6edf3classTff7b72=Ta5d6ff"w-3 h-3" Tb4b4b4/Tb4b4b4>
View in Browser
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"font-mono text-sm select-all"Tb4b4b4>Tff7b72{{ Te6edf3selectedNodeTb4b4b4.Te6edf3destination_hash Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Tabs: Pages / Files -->
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex gap-2 border-b border-gray-200 dark:border-zinc-700"Tb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3detailTab Tff7b72=== Ta5d6ff'pages'
Tff7b72? Ta5d6ff'border-b-2 border-blue-500 text-blue-600 dark:text-blue-400'
Tff7b72: Ta5d6ff'text-gray-600 dark:text-gray-400'Tb4b4b4,
Ta5d6ff'px-4 py-2 font-semibold transition text-sm'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3detailTab Tff7b72= Ta5d6ff'pages'Ta5d6ff"
Tb4b4b4>
Pages (Tff7b72{{ Te6edf3selectedNodeTb4b4b4.Te6edf3pagesTb4b4b4.Te6edf3length Tff7b72}})
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"Tb4b4b4[
Te6edf3detailTab Tff7b72=== Ta5d6ff'files'
Tff7b72? Ta5d6ff'border-b-2 border-blue-500 text-blue-600 dark:text-blue-400'
Tff7b72: Ta5d6ff'text-gray-600 dark:text-gray-400'Tb4b4b4,
Ta5d6ff'px-4 py-2 font-semibold transition text-sm'Tb4b4b4,
Tb4b4b4]Ta5d6ff"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3detailTab Tff7b72= Ta5d6ff'files'Ta5d6ff"
Tb4b4b4>
Files (Tff7b72{{ Te6edf3selectedNodeTb4b4b4.Te6edf3filesTb4b4b4.Te6edf3length Tff7b72}})
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Pages Tab -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3detailTab Tff7b72=== Ta5d6ff'pages'Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"space-y-3"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3newPageNameTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3placeholderTff7b72=Ta5d6ff"Page name (e.g. index)"
Te6edf3classTff7b72=Ta5d6ff"input-field flex-1"
Tb4b4b4@Te6edf3keyupTb4b4b4.Te6edf3enterTff7b72=Ta5d6ff"Te6edf3addPageTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3classTff7b72=Ta5d6ff"primary-chip py-1! px-3! text-xs!" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3addPageTa5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"plus" Te6edf3classTff7b72=Ta5d6ff"w-3.5 h-3.5" Tb4b4b4/Tb4b4b4>
Add Page
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3selectedNodeTb4b4b4.Te6edf3pagesTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-500 dark:text-gray-400 py-4 text-center"
Tb4b4b4>
No pages yet. Add one or publish from the Micron Editor.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3page Tff7b72in Te6edf3selectedNodeTb4b4b4.Te6edf3pagesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3pageTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between p-3 rounded-lg bg-slate-50 dark:bg-zinc-800/50 border border-gray-200 dark:border-zinc-700"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"file-document-outline" Te6edf3classTff7b72=Ta5d6ff"w-4 h-4 text-teal-500" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-sm font-mono text-gray-900 dark:text-white"Tb4b4b4>Tff7b72{{ Te6edf3page Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3classTff7b72=Ta5d6ff"secondary-chip py-0.5! px-2! text-xs!" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3editPageTb4b4b4(Te6edf3pageTb4b4b4)Ta5d6ff"Tb4b4b4>
Edit
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"secondary-chip py-0.5! px-2! text-xs! text-red-500!"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3deletePageTb4b4b4(Te6edf3pageTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"delete" Te6edf3classTff7b72=Ta5d6ff"w-3 h-3" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Page editor -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3editingPageTa5d6ff" Te6edf3classTff7b72=Ta5d6ff"space-y-2"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-sm font-semibold text-gray-900 dark:text-white"Tb4b4b4>
Editing: Tff7b72{{ Te6edf3editingPage Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3classTff7b72=Ta5d6ff"primary-chip py-1! px-3! text-xs!" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3savePageTa5d6ff"Tb4b4b4>SaveTb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3classTff7b72=Ta5d6ff"secondary-chip py-1! px-3! text-xs!" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3editingPage Tff7b72= Tff7b72nullTa5d6ff"Tb4b4b4>
Cancel
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72textarea
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3editingPageContentTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"w-full h-64 bg-white dark:bg-zinc-900 text-gray-900 dark:text-white p-3 font-mono text-sm rounded-lg border border-gray-200 dark:border-zinc-700 resize-y focus:outline-hidden focus:ring-2 focus:ring-blue-500/50"
Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72textareaTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Files Tab -->
Tb4b4b4<Tff7b72div Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3detailTab Tff7b72=== Ta5d6ff'files'Ta5d6ff" Te6edf3classTff7b72=Ta5d6ff"space-y-3"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72input Te6edf3refTff7b72=Ta5d6ff"fileInput" Te6edf3typeTff7b72=Ta5d6ff"file" Te6edf3classTff7b72=Ta5d6ff"hidden" Tb4b4b4@Te6edf3changeTff7b72=Ta5d6ff"Te6edf3uploadFileTa5d6ff" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3classTff7b72=Ta5d6ff"primary-chip py-1! px-3! text-xs!" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3$refsTb4b4b4.Te6edf3fileInputTb4b4b4.Te6edf3clickTb4b4b4(Tb4b4b4)Ta5d6ff"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"upload" Te6edf3classTff7b72=Ta5d6ff"w-3.5 h-3.5" Tb4b4b4/Tb4b4b4>
Upload File
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3selectedNodeTb4b4b4.Te6edf3filesTb4b4b4.Te6edf3length Tff7b72=== T79c0ff0Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"text-sm text-gray-500 dark:text-gray-400 py-4 text-center"
Tb4b4b4>
No files yet. Upload files to serve over the mesh.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div
Te6edf3v-forTff7b72=Ta5d6ff"Te6edf3file Tff7b72in Te6edf3selectedNodeTb4b4b4.Te6edf3filesTa5d6ff"
Tb4b4b4:Te6edf3keyTff7b72=Ta5d6ff"Te6edf3fileTb4b4b4.Te6edf3nameTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"flex items-center justify-between p-3 rounded-lg bg-slate-50 dark:bg-zinc-800/50 border border-gray-200 dark:border-zinc-700"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex items-center gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"file-outline" Te6edf3classTff7b72=Ta5d6ff"w-4 h-4 text-blue-500" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-sm font-mono text-gray-900 dark:text-white"Tb4b4b4>Tff7b72{{ Te6edf3fileTb4b4b4.Te6edf3name Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"text-xs text-gray-500 dark:text-gray-400"Tb4b4b4>Tff7b72{{
Te6edf3formatFileSizeTb4b4b4(Te6edf3fileTb4b4b4.Te6edf3sizeTb4b4b4)
Tff7b72}}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72button
Te6edf3classTff7b72=Ta5d6ff"secondary-chip py-0.5! px-2! text-xs! text-red-500!"
Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3deleteFileTb4b4b4(Te6edf3fileTb4b4b4.Te6edf3nameTb4b4b4)Ta5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72MaterialDesignIcon Te6edf3icon-nameTff7b72=Ta5d6ff"delete" Te6edf3classTff7b72=Ta5d6ff"w-3 h-3" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Create Node Dialog -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3showCreateDialogTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"fixed inset-0 bg-black/50 flex items-center justify-center z-50"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3selfTff7b72=Ta5d6ff"Te6edf3showCreateDialog Tff7b72= Tff7b72falseTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-900 rounded-2xl p-6 w-full max-w-md mx-4 shadow-xl space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-lg font-semibold text-gray-900 dark:text-white"Tb4b4b4>Create Mesh ServerTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72label Te6edf3classTff7b72=Ta5d6ff"glass-label"Tb4b4b4>Server NameTb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3createNodeNameTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Te6edf3placeholderTff7b72=Ta5d6ff"My Mesh Server"
Te6edf3classTff7b72=Ta5d6ff"input-field"
Tb4b4b4@Te6edf3keyupTb4b4b4.Te6edf3enterTff7b72=Ta5d6ff"Te6edf3createNodeTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex justify-end gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3classTff7b72=Ta5d6ff"secondary-chip py-1.5! px-4! text-sm!" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3showCreateDialog Tff7b72= Tff7b72falseTa5d6ff"Tb4b4b4>
Cancel
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3classTff7b72=Ta5d6ff"primary-chip py-1.5! px-4! text-sm!" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3createNodeTa5d6ff"Tb4b4b4>CreateTb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Rename Dialog -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3showRenameDialogTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"fixed inset-0 bg-black/50 flex items-center justify-center z-50"
Tb4b4b4@Te6edf3clickTb4b4b4.Te6edf3selfTff7b72=Ta5d6ff"Te6edf3showRenameDialog Tff7b72= Tff7b72falseTa5d6ff"
Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"bg-white dark:bg-zinc-900 rounded-2xl p-6 w-full max-w-md mx-4 shadow-xl space-y-4"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"text-lg font-semibold text-gray-900 dark:text-white"Tb4b4b4>Rename ServerTb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72label Te6edf3classTff7b72=Ta5d6ff"glass-label"Tb4b4b4>New NameTb4b4b4<Tb4b4b4/Tff7b72labelTb4b4b4>
Tb4b4b4<Tff7b72input
Te6edf3v-modelTff7b72=Ta5d6ff"Te6edf3renameNodeNameTa5d6ff"
Te6edf3typeTff7b72=Ta5d6ff"text"
Tb4b4b4:Te6edf3placeholderTff7b72=Ta5d6ff"Te6edf3selectedNode Tff7b72? Te6edf3selectedNodeTb4b4b4.Te6edf3name Tff7b72: Ta5d6ff''Ta5d6ff"
Te6edf3classTff7b72=Ta5d6ff"input-field"
Tb4b4b4@Te6edf3keyupTb4b4b4.Te6edf3enterTff7b72=Ta5d6ff"Te6edf3renameNodeTa5d6ff"
Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"flex justify-end gap-2"Tb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3classTff7b72=Ta5d6ff"secondary-chip py-1.5! px-4! text-sm!" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3showRenameDialog Tff7b72= Tff7b72falseTa5d6ff"Tb4b4b4>
Cancel
Tb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tff7b72button Te6edf3classTff7b72=Ta5d6ff"primary-chip py-1.5! px-4! text-sm!" Tb4b4b4@Te6edf3clickTff7b72=Ta5d6ff"Te6edf3renameNodeTa5d6ff"Tb4b4b4>RenameTb4b4b4<Tb4b4b4/Tff7b72buttonTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
T8b949e<!-- Status message -->
Tb4b4b4<Tff7b72div
Te6edf3v-ifTff7b72=Ta5d6ff"Te6edf3statusMessageTa5d6ff"
Te6edf3classTff7b72=Ta5d6ff"fixed bottom-4 right-4 z-50 p-3 rounded-lg shadow-lg text-sm"
Tb4b4b4:Te6edf3classTff7b72=Ta5d6ff"
Te6edf3statusSuccess
Tff7b72? Ta5d6ff'bg-green-100 dark:bg-green-900/40 text-green-800 dark:text-green-200'
Tff7b72: Ta5d6ff'bg-red-100 dark:bg-red-900/40 text-red-800 dark:text-red-200'
Ta5d6ff"
Tb4b4b4>
Tff7b72{{ Te6edf3statusMessage Tff7b72}}
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72templateTb4b4b4>
Tb4b4b4<Tff7b72scriptTb4b4b4>
Tff7b72import Te6edf3MaterialDesignIcon Tff7b72from Ta5d6ff"../MaterialDesignIcon.vue"Tb4b4b4;
Tff7b72import Te6edf3DialogUtils Tff7b72from Ta5d6ff"../../js/DialogUtils"Tb4b4b4;
Tff7b72export Tff7b72default Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"PageNodesPage"Tb4b4b4,
Te6edf3componentsTff7b72: Tb4b4b4{
Te6edf3MaterialDesignIconTb4b4b4,
Tb4b4b4}Tb4b4b4,
Te6edf3dataTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72return Tb4b4b4{
Te6edf3nodesTff7b72: Tb4b4b4[Tb4b4b4]Tb4b4b4,
Te6edf3loadingTff7b72: Tff7b72trueTb4b4b4,
Te6edf3selectedNodeTff7b72: Tff7b72nullTb4b4b4,
Te6edf3detailTabTff7b72: Ta5d6ff"pages"Tb4b4b4,
Te6edf3showCreateDialogTff7b72: Tff7b72falseTb4b4b4,
Te6edf3showRenameDialogTff7b72: Tff7b72falseTb4b4b4,
Te6edf3createNodeNameTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3renameNodeNameTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3newPageNameTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3editingPageTff7b72: Tff7b72nullTb4b4b4,
Te6edf3editingPageContentTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3statusMessageTff7b72: Ta5d6ff""Tb4b4b4,
Te6edf3statusSuccessTff7b72: Tff7b72trueTb4b4b4,
Te6edf3statusTimeoutTff7b72: Tff7b72nullTb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3mountedTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadNodesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3methodsTff7b72: Tb4b4b4{
Tff7b72async Te6edf3loadNodesTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3loading Tff7b72= Tff7b72trueTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(Ta5d6ff"/api/v1/page-nodes"Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3nodes Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3selectedNodeTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3updated Tff7b72= Tff7b72thisTb4b4b4.Te6edf3nodesTb4b4b4.Te6edf3findTb4b4b4(Tb4b4b4(Te6edf3nTb4b4b4) Tb4b4b4=> Te6edf3nTb4b4b4.Te6edf3node_id Tff7b72=== Tff7b72thisTb4b4b4.Te6edf3selectedNodeTb4b4b4.Te6edf3node_idTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3updatedTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3selectedNode Tff7b72= Te6edf3updatedTb4b4b4;
Tb4b4b4} Tff7b72else Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3selectedNode Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Ta5d6ff"Failed to load nodes"Tb4b4b4, Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72finally Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3loading Tff7b72= Tff7b72falseTb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3selectNodeTb4b4b4(Te6edf3nodeTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3selectedNode Tff7b72= Te6edf3nodeTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3detailTab Tff7b72= Ta5d6ff"pages"Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3editingPage Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3createNodeTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3createNodeNameTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff"/api/v1/page-nodes"Tb4b4b4, Tb4b4b4{ Te6edf3nameTff7b72: Tff7b72thisTb4b4b4.Te6edf3createNodeNameTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4) Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3createNodeName Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3showCreateDialog Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Ta5d6ff"Server created"Tb4b4b4, Tff7b72trueTb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadNodesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Failed to create server"Tb4b4b4, Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3deleteNodeTb4b4b4(Te6edf3nodeIdTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tb4b4b4(Tff7b72await Te6edf3DialogUtilsTb4b4b4.Te6edf3confirmTb4b4b4(Ta5d6ff"Delete this mesh server and all its content?"Tb4b4b4)Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Tff7b72deleteTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/page-nodes/Tffd700${Te6edf3nodeIdTffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3selectedNode Tff7b72&& Tff7b72thisTb4b4b4.Te6edf3selectedNodeTb4b4b4.Te6edf3node_id Tff7b72=== Te6edf3nodeIdTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3selectedNode Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Ta5d6ff"Server deleted"Tb4b4b4, Tff7b72trueTb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadNodesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Ta5d6ff"Failed to delete server"Tb4b4b4, Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3startNodeTb4b4b4(Te6edf3nodeIdTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/page-nodes/Tffd700${Te6edf3nodeIdTffd700}Ta5d6ff/startTa5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Ta5d6ff`Ta5d6ffServer started: Tffd700${Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4.Te6edf3destination_hashTffd700}Ta5d6ff`Tb4b4b4, Tff7b72trueTb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadNodesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4(Te6edf3eTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Te6edf3eTb4b4b4.Te6edf3responseTff7b72?Tb4b4b4.Te6edf3dataTff7b72?Tb4b4b4.Te6edf3message Tff7b72|| Ta5d6ff"Failed to start server"Tb4b4b4, Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3stopNodeTb4b4b4(Te6edf3nodeIdTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/page-nodes/Tffd700${Te6edf3nodeIdTffd700}Ta5d6ff/stopTa5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Ta5d6ff"Server stopped"Tb4b4b4, Tff7b72trueTb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadNodesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Ta5d6ff"Failed to stop server"Tb4b4b4, Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3announceNodeTb4b4b4(Te6edf3nodeIdTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/page-nodes/Tffd700${Te6edf3nodeIdTffd700}Ta5d6ff/announceTa5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Ta5d6ff"Announced on mesh"Tb4b4b4, Tff7b72trueTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Ta5d6ff"Failed to announce"Tb4b4b4, Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3renameNodeTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3renameNodeNameTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4) Tff7b72|| Tff7b72!Tff7b72thisTb4b4b4.Te6edf3selectedNodeTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3putTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/page-nodes/Tffd700${Tff7b72thisTb4b4b4.Te6edf3selectedNodeTb4b4b4.Te6edf3node_idTffd700}Ta5d6ff/renameTa5d6ff`Tb4b4b4, Tb4b4b4{
Te6edf3nameTff7b72: Tff7b72thisTb4b4b4.Te6edf3renameNodeNameTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3renameNodeName Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3showRenameDialog Tff7b72= Tff7b72falseTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Ta5d6ff"Server renamed"Tb4b4b4, Tff7b72trueTb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadNodesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Ta5d6ff"Failed to rename server"Tb4b4b4, Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3addPageTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3newPageNameTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4) Tff7b72|| Tff7b72!Tff7b72thisTb4b4b4.Te6edf3selectedNodeTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/page-nodes/Tffd700${Tff7b72thisTb4b4b4.Te6edf3selectedNodeTb4b4b4.Te6edf3node_idTffd700}Ta5d6ff/pagesTa5d6ff`Tb4b4b4, Tb4b4b4{
Te6edf3nameTff7b72: Tff7b72thisTb4b4b4.Te6edf3newPageNameTb4b4b4.Te6edf3trimTb4b4b4(Tb4b4b4)Tb4b4b4,
Te6edf3contentTff7b72: Ta5d6ff""Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3newPageName Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Ta5d6ff"Page created"Tb4b4b4, Tff7b72trueTb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadNodesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Ta5d6ff"Failed to create page"Tb4b4b4, Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3editPageTb4b4b4(Te6edf3pageNameTb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Tff7b72const Te6edf3response Tff7b72= Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3getTb4b4b4(
Ta5d6ff`Ta5d6ff/api/v1/page-nodes/Tffd700${Tff7b72thisTb4b4b4.Te6edf3selectedNodeTb4b4b4.Te6edf3node_idTffd700}Ta5d6ff/pages/Tffd700${Tffa657encodeURIComponentTb4b4b4(Te6edf3pageNameTb4b4b4)Tffd700}Ta5d6ff`
Tb4b4b4)Tb4b4b4;
Tff7b72let Te6edf3body Tff7b72= Te6edf3responseTb4b4b4.Te6edf3dataTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72typeof Te6edf3body Tff7b72=== Ta5d6ff"string"Tb4b4b4) Tb4b4b4{
Tff7b72try Tb4b4b4{
Te6edf3body Tff7b72= Tffa657JSONTb4b4b4.Te6edf3parseTb4b4b4(Te6edf3bodyTb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Te6edf3body Tff7b72= Tb4b4b4{Tb4b4b4}Tb4b4b4;
Tb4b4b4}
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3editingPage Tff7b72= Te6edf3pageNameTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3editingPageContent Tff7b72= Te6edf3bodyTff7b72?Tb4b4b4.Te6edf3content Tff7b72?? Ta5d6ff""Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Ta5d6ff"Failed to load page"Tb4b4b4, Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3savePageTb4b4b4(Tb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tff7b72thisTb4b4b4.Te6edf3editingPage Tff7b72|| Tff7b72!Tff7b72thisTb4b4b4.Te6edf3selectedNodeTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/page-nodes/Tffd700${Tff7b72thisTb4b4b4.Te6edf3selectedNodeTb4b4b4.Te6edf3node_idTffd700}Ta5d6ff/pagesTa5d6ff`Tb4b4b4, Tb4b4b4{
Te6edf3nameTff7b72: Tff7b72thisTb4b4b4.Te6edf3editingPageTb4b4b4,
Te6edf3contentTff7b72: Tff7b72thisTb4b4b4.Te6edf3editingPageContentTb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3editingPage Tff7b72= Tff7b72nullTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3editingPageContent Tff7b72= Ta5d6ff""Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Ta5d6ff"Page saved"Tb4b4b4, Tff7b72trueTb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadNodesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Ta5d6ff"Failed to save page"Tb4b4b4, Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3deletePageTb4b4b4(Te6edf3pageNameTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tb4b4b4(Tff7b72await Te6edf3DialogUtilsTb4b4b4.Te6edf3confirmTb4b4b4(Ta5d6ff`Ta5d6ffDelete page "Tffd700${Te6edf3pageNameTffd700}Ta5d6ff"?Ta5d6ff`Tb4b4b4)Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Tff7b72deleteTb4b4b4(
Ta5d6ff`Ta5d6ff/api/v1/page-nodes/Tffd700${Tff7b72thisTb4b4b4.Te6edf3selectedNodeTb4b4b4.Te6edf3node_idTffd700}Ta5d6ff/pages/Tffd700${Tffa657encodeURIComponentTb4b4b4(Te6edf3pageNameTb4b4b4)Tffd700}Ta5d6ff`
Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3editingPage Tff7b72=== Te6edf3pageNameTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3editingPage Tff7b72= Tff7b72nullTb4b4b4;
Tb4b4b4}
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Ta5d6ff"Page deleted"Tb4b4b4, Tff7b72trueTb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadNodesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Ta5d6ff"Failed to delete page"Tb4b4b4, Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3uploadFileTb4b4b4(Te6edf3eventTb4b4b4) Tb4b4b4{
Tff7b72const Te6edf3file Tff7b72= Te6edf3eventTb4b4b4.Te6edf3targetTb4b4b4.Te6edf3filesTb4b4b4[T79c0ff0Tb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72!Te6edf3file Tff7b72|| Tff7b72!Tff7b72thisTb4b4b4.Te6edf3selectedNodeTb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72const Te6edf3formData Tff7b72= Tff7b72new Te6edf3FormDataTb4b4b4(Tb4b4b4)Tb4b4b4;
Te6edf3formDataTb4b4b4.Te6edf3appendTb4b4b4(Ta5d6ff"file"Tb4b4b4, Te6edf3fileTb4b4b4)Tb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Te6edf3postTb4b4b4(Ta5d6ff`Ta5d6ff/api/v1/page-nodes/Tffd700${Tff7b72thisTb4b4b4.Te6edf3selectedNodeTb4b4b4.Te6edf3node_idTffd700}Ta5d6ff/filesTa5d6ff`Tb4b4b4, Te6edf3formDataTb4b4b4, Tb4b4b4{
Te6edf3headersTff7b72: Tb4b4b4{ Ta5d6ff"Content-Type"Tff7b72: Ta5d6ff"multipart/form-data" Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Ta5d6ff"File uploaded"Tb4b4b4, Tff7b72trueTb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadNodesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Ta5d6ff"Failed to upload file"Tb4b4b4, Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}
Te6edf3eventTb4b4b4.Te6edf3targetTb4b4b4.Te6edf3value Tff7b72= Ta5d6ff""Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tff7b72async Te6edf3deleteFileTb4b4b4(Te6edf3fileNameTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Tff7b72!Tb4b4b4(Tff7b72await Te6edf3DialogUtilsTb4b4b4.Te6edf3confirmTb4b4b4(Ta5d6ff`Ta5d6ffDelete file "Tffd700${Te6edf3fileNameTffd700}Ta5d6ff"?Ta5d6ff`Tb4b4b4)Tb4b4b4)Tb4b4b4) Tff7b72returnTb4b4b4;
Tff7b72try Tb4b4b4{
Tff7b72await Tffa657windowTb4b4b4.Te6edf3apiTb4b4b4.Tff7b72deleteTb4b4b4(
Ta5d6ff`Ta5d6ff/api/v1/page-nodes/Tffd700${Tff7b72thisTb4b4b4.Te6edf3selectedNodeTb4b4b4.Te6edf3node_idTffd700}Ta5d6ff/files/Tffd700${Tffa657encodeURIComponentTb4b4b4(Te6edf3fileNameTb4b4b4)Tffd700}Ta5d6ff`
Tb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Ta5d6ff"File deleted"Tb4b4b4, Tff7b72trueTb4b4b4)Tb4b4b4;
Tff7b72await Tff7b72thisTb4b4b4.Te6edf3loadNodesTb4b4b4(Tb4b4b4)Tb4b4b4;
Tb4b4b4} Tff7b72catch Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3showStatusTb4b4b4(Ta5d6ff"Failed to delete file"Tb4b4b4, Tff7b72falseTb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3viewNodeTb4b4b4(Te6edf3nodeTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3nodeTb4b4b4.Te6edf3destination_hashTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3$routerTb4b4b4.Te6edf3pushTb4b4b4(Tb4b4b4{
Te6edf3nameTff7b72: Ta5d6ff"nomadnetwork"Tb4b4b4,
Te6edf3paramsTff7b72: Tb4b4b4{ Te6edf3destinationHashTff7b72: Te6edf3nodeTb4b4b4.Te6edf3destination_hash Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4)Tb4b4b4;
Tb4b4b4}
Tb4b4b4}Tb4b4b4,
Te6edf3formatFileSizeTb4b4b4(Te6edf3bytesTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3bytes Tff7b72< T79c0ff1024Tb4b4b4) Tff7b72return Te6edf3bytes Tff7b72+ Ta5d6ff" B"Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3bytes Tff7b72< T79c0ff1024 Tff7b72* T79c0ff1024Tb4b4b4) Tff7b72return Tb4b4b4(Te6edf3bytes Tff7b72/ T79c0ff1024Tb4b4b4)Tb4b4b4.Te6edf3toFixedTb4b4b4(T79c0ff1Tb4b4b4) Tff7b72+ Ta5d6ff" KB"Tb4b4b4;
Tff7b72return Tb4b4b4(Te6edf3bytes Tff7b72/ Tb4b4b4(T79c0ff1024 Tff7b72* T79c0ff1024Tb4b4b4)Tb4b4b4)Tb4b4b4.Te6edf3toFixedTb4b4b4(T79c0ff1Tb4b4b4) Tff7b72+ Ta5d6ff" MB"Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3formatMeshUptimeTb4b4b4(Te6edf3secondsTb4b4b4) Tb4b4b4{
Tff7b72if Tb4b4b4(Te6edf3seconds Tff7b72== Tff7b72null Tff7b72|| Te6edf3seconds Tff7b72< T79c0ff0Tb4b4b4) Tff7b72return Ta5d6ff"—"Tb4b4b4;
Tff7b72let Te6edf3s Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3secondsTb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3s Tff7b72< T79c0ff60Tb4b4b4) Tff7b72return Ta5d6ff`Tffd700${Te6edf3sTffd700}Ta5d6ffsTa5d6ff`Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3s Tff7b72< T79c0ff3600Tb4b4b4) Tff7b72return Ta5d6ff`Tffd700${Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3s Tff7b72/ T79c0ff60Tb4b4b4)Tffd700}Ta5d6ffmTa5d6ff`Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3s Tff7b72< T79c0ff86400Tb4b4b4) Tff7b72return Ta5d6ff`Tffd700${Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3s Tff7b72/ T79c0ff3600Tb4b4b4)Tffd700}Ta5d6ffhTa5d6ff`Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3s Tff7b72< T79c0ff30 Tff7b72* T79c0ff86400Tb4b4b4) Tff7b72return Ta5d6ff`Tffd700${Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3s Tff7b72/ T79c0ff86400Tb4b4b4)Tffd700}Ta5d6ffdTa5d6ff`Tb4b4b4;
Tff7b72const Te6edf3yearSec Tff7b72= T79c0ff365 Tff7b72* T79c0ff86400Tb4b4b4;
Tff7b72const Te6edf3monthSec Tff7b72= T79c0ff30 Tff7b72* T79c0ff86400Tb4b4b4;
Tff7b72const Te6edf3years Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3s Tff7b72/ Te6edf3yearSecTb4b4b4)Tb4b4b4;
Te6edf3s Tff7b72-= Te6edf3years Tff7b72* Te6edf3yearSecTb4b4b4;
Tff7b72const Te6edf3months Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3s Tff7b72/ Te6edf3monthSecTb4b4b4)Tb4b4b4;
Te6edf3s Tff7b72-= Te6edf3months Tff7b72* Te6edf3monthSecTb4b4b4;
Tff7b72const Te6edf3days Tff7b72= Tffa657MathTb4b4b4.Te6edf3floorTb4b4b4(Te6edf3s Tff7b72/ T79c0ff86400Tb4b4b4)Tb4b4b4;
Tff7b72const Te6edf3parts Tff7b72= Tb4b4b4[Tb4b4b4]Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3yearsTb4b4b4) Te6edf3partsTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff`Tffd700${Te6edf3yearsTffd700}Ta5d6ff yearTffd700${Te6edf3years Tff7b72=== T79c0ff1 Tff7b72? Ta5d6ff"" Tff7b72: Ta5d6ff"s"Tffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3monthsTb4b4b4) Te6edf3partsTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff`Tffd700${Te6edf3monthsTffd700}Ta5d6ff monthTffd700${Te6edf3months Tff7b72=== T79c0ff1 Tff7b72? Ta5d6ff"" Tff7b72: Ta5d6ff"s"Tffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72if Tb4b4b4(Te6edf3daysTb4b4b4) Te6edf3partsTb4b4b4.Te6edf3pushTb4b4b4(Ta5d6ff`Tffd700${Te6edf3daysTffd700}Ta5d6ff dayTffd700${Te6edf3days Tff7b72=== T79c0ff1 Tff7b72? Ta5d6ff"" Tff7b72: Ta5d6ff"s"Tffd700}Ta5d6ff`Tb4b4b4)Tb4b4b4;
Tff7b72return Te6edf3partsTb4b4b4.Te6edf3length Tff7b72? Te6edf3partsTb4b4b4.Te6edf3joinTb4b4b4(Ta5d6ff" "Tb4b4b4) Tff7b72: Ta5d6ff"0d"Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Te6edf3showStatusTb4b4b4(Te6edf3messageTb4b4b4, Te6edf3successTb4b4b4) Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3statusMessage Tff7b72= Te6edf3messageTb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3statusSuccess Tff7b72= Te6edf3successTb4b4b4;
Tff7b72if Tb4b4b4(Tff7b72thisTb4b4b4.Te6edf3statusTimeoutTb4b4b4) Te6edf3clearTimeoutTb4b4b4(Tff7b72thisTb4b4b4.Te6edf3statusTimeoutTb4b4b4)Tb4b4b4;
Tff7b72thisTb4b4b4.Te6edf3statusTimeout Tff7b72= Te6edf3setTimeoutTb4b4b4(Tb4b4b4(Tb4b4b4) Tb4b4b4=> Tb4b4b4{
Tff7b72thisTb4b4b4.Te6edf3statusMessage Tff7b72= Ta5d6ff""Tb4b4b4;
Tb4b4b4}Tb4b4b4, T79c0ff3000Tb4b4b4)Tb4b4b4;
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4,
Tb4b4b4}Tb4b4b4;
Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────